/* 
 * File:   cScrollMessage.cpp
 * Author: josep
 * 
 * Created on 12 / gener / 2011, 01:05
 */

#include "cScrollMessage.h"

cScrollMessage::cScrollMessage() {
    offsetRow=0;
    maxOffsetY=1024;
    RowStep=1;
}

cScrollMessage::cScrollMessage(const cScrollMessage& orig):cPositionedMessage(orig) {
    messages=orig.messages;
    offsetRow=orig.offsetRow;
    maxOffsetY=orig.maxOffsetY;
    RowStep=orig.RowStep;
}

cScrollMessage::~cScrollMessage() {
}

void cScrollMessage::Draw(){
    float posRow;
    int x, y, maxRows, row;
    char *c;
    GLfloat ccolor[4];
    list<string>::iterator it;

    maxRows = (maxOffsetY-GetPosY())/fontHeight;
    row=((int)offsetRow)/fontHeight;
    y=GetPosY()+offsetRow;

    it=messages.begin();
    while(it!=messages.end() && row>maxRows){
        it++;
        row--;
        y-=fontHeight;
    }


    glGetFloatv(GL_CURRENT_COLOR, ccolor);

    glColor3f(GetColor()[0], GetColor()[1], GetColor()[2]);
    while(it!=messages.end() && row>=0){
        SetMessage((*it).c_str());
        x=GetPosX();
        for (c=GetMessage(); *c != '\0'; c++) {
            glRasterPos2f(x,y);
            glutBitmapCharacter(GetFont(), *c);
            x = x + glutBitmapWidth(GetFont(),*c) + GetSpacing();
        }
        y-=fontHeight;
        row--;
        it++;
    }

    glColor3f(ccolor[0], ccolor[1], ccolor[2]);
    offsetRow+=RowStep;
}
void cScrollMessage::SetFontHeight(int fontHeight) {
    this->fontHeight = fontHeight;
}
int cScrollMessage::GetFontHeight() const {
    return fontHeight;
}
void cScrollMessage::SetMaxOffsetY(int maxOffsetY) {
    this->maxOffsetY = maxOffsetY;
}
int cScrollMessage::GetMaxOffsetY() const {
    return maxOffsetY;
}
void cScrollMessage::SetOffsetY(int offsetY) {
    this->offsetRow = offsetY;
}
int cScrollMessage::GetOffsetY() const {
    return offsetRow;
}
list<string>* cScrollMessage::GetMessages() {
    return &messages;
}
void cScrollMessage::SetRowStep(float RowStep) {
    this->RowStep = RowStep;
}
float cScrollMessage::GetRowStep() const {
    return RowStep;
}

